package org.example.demo;

import com.sun.java.swing.SwingUtilities3;
import org.example.login.LoginPenal;
import org.example.util.FrameUtil;

import javax.swing.*;
import java.awt.*;

/*
BoxLayout‌：
允许在单行或单列中排列组件，适用于需要动态组件大小的场景‌
可以水平或垂直排列组件，提供了更大的灵活性

*/
public class BoxLayoutDemo {

    static JPanel jPanel=new JPanel();

    public static void main(String[] args) {
        // 创建一个新的JFrame容器
        JFrame frame = new JFrame("BoxLayout Demo");
        frame.setSize(320, 448);
        // 初始化窗口图标数据
        FrameUtil.initFrame(frame, "BoxLayout演示", "/00.png");
        Container panel = frame.getContentPane();

        m1(jPanel);
        flush(frame, jPanel);

//        m2(panel);

        // 设置窗口可见
        frame.setVisible(true);

    }

    // 横向
    public static void m1(Container panel) {

        panel.setLayout(new BoxLayout(panel, BoxLayout.LINE_AXIS)); // 水平布局

        // 创建并添加组件到JPanel中
        JButton button1 = new JButton("Button 1");
        JButton button2 = new JButton("Button 2");
        JButton button3 = new JButton("Button 3");

        // 创建横向不可见box
        panel.add(Box.createHorizontalStrut(20));
        panel.add(button1);
        panel.add(Box.createRigidArea(new Dimension(10, 20)));
        panel.add(button2);
//        创建一个从左到右显示其组件的 Box
//        panel.add(Box.createHorizontalBox());
        //创建一个不可见的、固定宽度的组件
        panel.add(Box.createHorizontalStrut(10));

        panel.add(button3);

    }

    // 纵向 垂直
    public static void m2(Container panel) {
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); // 垂直布局

        // 创建并添加组件到JPanel中
        JButton button1 = new JButton("Button 1");
        JButton button2 = new JButton("Button 2");
        JButton button3 = new JButton("Button 3");

        // 使用Box.createVerticalStrut()创建垂直间距
        panel.add(Box.createVerticalStrut(20));
        panel.add(button1);

        // 使用Box.createRigidArea()创建固定间距
        panel.add(Box.createRigidArea(new Dimension(50, 20)));
        panel.add(button2);

        // 使用Box.createVerticalGlue()创建可伸缩的垂直间距 创建一个纵向 glue 组件。
//        panel.add(Box.createVerticalGlue());
        panel.add(button3);
    }

    public static void flush(JFrame frame, Container panel) {

        JButton flushBut = new JButton("刷新组件");
        panel.add(flushBut);

        flushBut.addActionListener(e -> {
            System.out.println("刷新？？？");
            SwingUtilities.invokeLater(() -> {
                frame.revalidate();  // 重新计算布局
                frame.repaint();      // 重绘组件
                // 移除旧组件（避免内存泄漏）
//                panel.getParent().remove(panel);
//            frame.add(panel);  // 添加新组件
            });
        });
        // 在修改后的方法末尾添加（确保在EDT线程执行）


    }
}
